<?php
/*************************************************************************
 * Zero PHP
 * Copyright (c) 2012
 * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
 * Author: zlk
 *************************************************************************/
 
/**
 * 导入类
 * $class 类名或带分组的类
 * $baseUrl 起始路径,默认在当前项目搜索
*/ 
function import($class, $baseUrl = '') {
    static $_file = array();
    static $_class = array();
    if(isset($_class[$baseUrl.$class])) return true;
    //转换成地址
    $class_path = str_replace('.', '/', $class);
    $class_strut = explode("/", $class);
    if($baseUrl==''){
    	$classfile = APP_PATH.$class_path.'.php';
    }else{
    	$classfile = $baseUrl.$class_path.'.php';
    }
    echo $classfile;
    //导入目录下的指定类库文件
    if(is_file($classfile)){
    require_once $classfile;
    }
}

function check_dir() {
	if(C('zero.FIRST_RUN')){
		if(!is_dir(RUN_PATH)) mk_dir(RUN_PATH);  // 缓存目录
		check_writeable(RUN_PATH);
		if(!is_dir(LOG_PATH))	mkdir(LOG_PATH);    // 日志目录
		if(!is_dir(TEMP_PATH))  mkdir(TEMP_PATH);	// 模版缓存目录
		if(!is_dir(DATA_PATH))	mkdir(DATA_PATH);	// 数据文件目录
		if(!is_dir(COMMON_PATH)) mkdir(COMMON_PATH);
		if(!is_dir(TPL_PATH)) mkdir(TPL_PATH);
		if(!is_dir(ACTION_PATH)) mkdir(ACTION_PATH);
		if(!is_dir(CONF_PATH)) mkdir(CONF_PATH);
		if(!is_dir(LANG_PATH)) mkdir(LANG_PATH);
		if(!is_dir(MODEL_PATH)) mkdir(MODEL_PATH);
		}
		if(!is_file(CONF_PATH.'config.php')){
			if (!copy(ZCOMMON_PATH.'config.php', CONF_PATH.'config.php')) {
			    exit("failed to copy config.php...");
			}
		return true;
	}
}

// 编译文件
function compilefile($filename) {
    if(STRIP_SPACE == 1) {
        $content = file_get_contents($filename);
    }else{
        $content = php_strip_whitespace($filename);
    }
    //去除<?php
    $content = substr(trim($content),5);
    //去除结束符
    if('?>' == substr($content,-2)) {
        $content = substr($content,0,-2);
    }
    return $content;
}

function check_writeable($path,$return=0){
	$iswrite=is_writable($path);
	if(!$iswrite) {
		if(!$return){
			header("Content-Type:text/html; charset=utf-8");
			exit('<div style=\'font-weight:bold;float:left;width:345px;text-align:center;border:1px solid silver;background:#E8EFFF;padding:8px;color:red;font-size:14px;font-family:Tahoma\'> [ '.$path.' ] 不可写！</div>');
		}else{
			return $iswrite;
		}
	}
}

// 区分大小写的文件存在判断
function file_exists_case($filename) {
    if (is_file($filename)) {
        if (IS_WIN &&APP_FILE_CASE) {
            if (basename(realpath($filename)) != basename($filename))
                return false;
        }
        return true;
    }
    return false;
}

// 循环创建目录
function mk_dir($dir, $mode = 0777) {
    if (is_dir($dir) || @mkdir($dir, $mode))
        return true;
    if (!mk_dir(dirname($dir), $mode))
        return false;
    return @mkdir($dir, $mode);
}

//向~cache.php中追加缓存的内容
function cache_file($path){
	$content='\n';
	$handle=fopen(RUN_PATH.'~cache.php',"ab");
	if(!$handle) exit("打开~cache.php错误");
	if(is_array($path)){
			foreach($path as $file){
			$content.=compilefile($file);
		}
	}else{
		$content.=compilefile($path);
	}
	fwrite($handle,$content);
	fclose($handle);
	return true;
}

// 浏览器友好的变量输出
function dump($var, $echo=true, $label=null, $strict=true) {
    $label = ($label === null) ? '' : rtrim($label) . ' ';
    if (!$strict) {
        if (ini_get('html_errors')) {
            $output = print_r($var, true);
            $output = "<pre>" . $label . htmlspecialchars($output, ENT_QUOTES) . "</pre>";
        } else {
            $output = $label . print_r($var, true);
        }
    } else {
        ob_start();
        var_dump($var);
        $output = ob_get_clean();
        if (!extension_loaded('xdebug')) {
            $output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output);
            $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
        }
    }
    if ($echo) {
        echo($output);
        return null;
    }else
        return $output;
}

//自动加载
function __autoload($classname){
	if(substr($classname,-5)=="Model") {
        require_once(MODEL_PATH.$classname.'.php');
    }elseif(substr($classname,-6)=="Action"){
        require_once(ACTION_PATH.$classname.'.php');
    }else{
		$path = '';
		switch ($classname[0]){
			case 'C':
				$path=ZCORE_PATH.$classname.'.php';
				break;
			case 'M':
				$path=ZMODEL_PATH.$classname.'.php';
				break;
			case 'I':
				$path=ZUTIL_PATH.$classname.'.php';
				break;
			case 'T':
				$path=ZTOOL_PATH.$classname.'.php';
				break;
			default:
				throw new Exception("can not find class $classname");
				break;
		}
	    require_once $path;
    }
    return;
}

function C($key=null,$val=null){
	static $config=array();
	if(!$config){
		$config=parse_ini_file(ZCOMMON_PATH.'config.php',true);
		$appconfig=@parse_ini_file(CONF_PATH.'config.php',true);
		$config=$appconfig?$appconfig:$config;
	}	
	if(empty($key))
		return $config;
	if(is_string($key)){
		//根据模块获取值
		if (!strpos($key, '.')) {
            $name = $key;
            if (is_null($val))
                return isset($config[$key]) ? $config[$key] : null;
            $config[$key] = $val;
            return;
        }else{
        	$key = explode('.', $key);
        if(is_null($val))
        	return isset($config[$key[0]][$key[1]])?$config[$key[0]][$key[1]]:null;
        $config[$key[0]][$key[1]]=$val;
        return;
        }
	}	
}

//获取所有自定义常量
function get_defined(){
	$define=get_defined_constants(true);
	return $define['user'];
}
?>